import { GetActDetail, GetClubDetail, GetComments, GetCourse, GetKidsList, GetStudentList, StudentApply, TeacherApply } from "../../../utils/data/apis";
import { DOMTextFormat } from "../../../utils/function/tools";
import { event } from "../../../utils/interface";
import msg from "../../../utils/model/msg";

const app = getApp();

// pages/detail/course/index.ts
Page({

  /**
   * 页面的初始数据
   */
  data: {
    detail: '', // 活动详情
    clubDetail: '', // 服务商详情
    comments: '', // 评论
    imgPrefix: app.globalData.imgPrefix, // 图片前缀
    introductionDetail: false, // 活动描述是否显示具体
    toolsActive: false, // 工具栏展开/折叠
    actionSheetHide: true, // 取消条款弹窗
    valid: true, // 报名有效性（过截止日期则无效）
    cancelContract: [
      '活动开始前1天退款订单总额的0%',
      '活动开始前2天退款订单总额的50%',
      '活动开始前3天退款订单总额的70%'
    ],
    studentInfoList: [],
    studentList: [],
    myClassList: [],
  },

  /**
   * @function 获取课程详情 
   */
  getDetail: function (id: string): Promise<{id: string, [key: string]: any}> {
    return new Promise((resolve, reject) => {
      GetActDetail({
        id: id,
        modelName: 'ClubNews'
      })
        .then(async (res: any) => {
          const data = res.data.data[0];
          const introduction = data.introduction;
          data.introduction = {
            origin: introduction,
            format: DOMTextFormat(introduction)
          };
          resolve(data)
          this.setData({
            detail: data,
          })
          // 检查是否已经超过/未到有效期
          this.verifyDate(data.sign_date_start, data.sign_date_end);
          // 获取服务商信息
          await this.getClubDetail(data);
          // 获取评论信息
          await this.getComments(data.id);
          msg.HideLoading();
        }) // GetActDetail成功回调
        .catch(err => {
          reject();
          msg.HideLoading();
          msg.Fail('详情获取失败');
          setTimeout(() => {
            wx.navigateBack();
          }, 100)
        }) // GetActDetail失败回调
    })
    msg.Loading();

  },
  /**
   * @function 活动描述展开/折叠
   */
  introductionSwitch: function () {
    this.setData({
      introductionDetail: !this.data.introductionDetail,
    })
  },
  /**
   * @function 工具栏展开/折叠
   */
  toolsBoxSwitch: function (e: event) {
    if (e.currentTarget.dataset.id == 'root') {
      if (this.data.toolsActive) {
        this.setData({
          toolsActive: false,
        })
      }
      return;
    }
    this.setData({
      toolsActive: !this.data.toolsActive,
    })
  },
  /**
   * @function 展示取消条款
   */
  showCancelContract: function () {
    this.setData({
      actionSheetHide: false,
    })
  },
  /**
   * @function 折叠取消条款
   */
  foldCancelContract: function () {
    if (this.data.actionSheetHide) {
      return;
    }
    this.setData({
      actionSheetHide: true,
    })
  },
  /**
   * @function 获取服务商信息
   */
  getClubDetail: async function (detail: any) {
    const id = detail.serviceClub; // 服务商id
    return await GetClubDetail({
      clubid: id,
    })
      .then((res: any) => {
        const clubDetail = res.data.data[0];
        // 去除DOM标签并且进行50字显示限制
        clubDetail.introduce = DOMTextFormat(clubDetail.introduce);
        this.setData({
          clubDetail: clubDetail,
        })
        return;
      })
  },
  /**
   * @function 获取评论信息
   */
  getComments: async function (courseid: string) {
    return await GetComments({
      courseid: courseid,
    })
      .then((res: any) => {
        console.log('comments', res.data.data);
        this.setData({
          comments: res.data.data,
        })
      })
      .catch(() => {
      })
  },
  verifyDate: function (start: string, end: string) {
    const startDate = new Date(start);
    const endDate = new Date(end);
    const present = new Date();
    const invalid = () => {
      const that = this;
      that.setData({
        valid: false,
      })
    }
    if (present < startDate) {
      msg.Fail("报名未开始");
      invalid();
      return;
    }
    if (present > endDate) {
      msg.Fail('报名已截止');
      invalid();
      return;
    }
    // 有效
  },
  /**
   * @function 导师报名
   */
  teacherApply: function () {
    const id_flag = wx.getStorageSync('id_flag');
    const user = wx.getStorageSync('user');
    const course: any = this.data.detail;
    if (id_flag !== 'teacher') {
      msg.Fail('没有权限');
      return;
    }
    if (user.type == '2' || user.type == 2) {
      // 学校老师 需要绑定学校、年级班级
      // user.school = '';
      if (user.school == '' || user.grade == '' || user.class == '') {
        msg.Modal('您尚未绑定自己的学校、年级或班级，请先进行绑定', '信息绑定', true)
          .then((res: any) => {
            if (res.confirm) {
              setTimeout(() => {
                wx.redirectTo({
                  url: '../../individual/setting/index',
                })
              }, 500)
            }
          })
        return;
      }
    }
    msg.Modal('是否确定报名', '报名确认', true)
      .then((res: any) => {
        if (res.confirm) {
          // 确认报名
          msg.Loading();
          TeacherApply({
            userid: user.id,
            username: user.name,
            courseid: course.id,
          }) // 导师报名
            .then((res: any) => {
              msg.HideLoading();
              if (res.data.data.msg == '报名成功') {
                msg.Success('报名成功');
                setTimeout(() => {
                  wx.redirectTo({
                    url: '../../individual/apply/index',
                  })
                }, 500)
                return;
              }
              msg.Fail('报名失败');
            }) // 报名成功回调
            .catch(() => {
              msg.HideLoading();
              msg.Fail('报名出错');
            })
        }
      })

  },
  selectMyClass: function (res: any) {
    console.log("selectMyClass", res);
    console.log('选择的班级是', this.data.myClassList[res.detail.value]);
    // this.generateOrder(this.data.myClassList[res.detail.value]);
  },
  /**
   * @function 学生报名
   */
  studentApply: function () {
    const id_flag = wx.getStorageSync('id_flag');
    const user = wx.getStorageSync('user');
    const course: any = this.data.detail;
    console.log("user", user);
    console.log(id_flag);
    if (!user) {// 未登录
      msg.Modal('登录以完成报名')
        .then(res => {
          wx.switchTab({
            url: '../../individual/index',
          })
        })
      return;
    }
    // 已登录
    if (id_flag == 'teacher' && user.type == '2' && this.data.studentList.length < 1) { //学校老师点击学生报名但是他的学生都已报名
      msg.Modal('您的学生都已报名，请选择导师报名');
      return;
    }
    else if (id_flag == 'teacher' && user.type != '2') { //其他老师只能自己报名
      msg.Modal('您不是学校老师，请选择导师报名');
      return;
    }

    if (id_flag == 'parent') { // 家长替学生报名
      GetKidsList({
        id: user.id
      })
        .then((res: any) => {
          const kidsList = res.data.data;
          console.log("kidsList", kidsList);
          if (kidsList.msg && kidsList.msg == '没查询到孩子信息' || kidsList.length == 0) {//没有查询到孩子信息
            msg.Modal('请先绑定孩子哦', '信息绑定', true)
              .then((res: any) => {
                if (res.confirm) {
                  setTimeout(() => {
                    wx.redirectTo({
                      url: '../../individual/setting/index',
                    })
                  }, 500)
                }
              })
            return;
          }
          //查询到了孩子信息
          const kidsNameList = kidsList.map((item: any) => {
            return item.name;
          })
          // console.log("kidsNameList",kidsNameList);
          msg.ActionSheet(kidsNameList, '选择报名的孩子')
            .then((res: any) => {
              console.log('选择的孩子是', kidsNameList[res.tapIndex]);
              this.generateOrder(kidsList[res.tapIndex]);
            })
            .catch(() => { })
        })
      return;
    }
    if (id_flag == 'student') { // 学生报名
      this.generateOrder(user);
      return;
    }

  },
  /**
   * picker根据选择器返回的值选择学生进行订单生成
   * */
  selectStudent: function (res: any) {
    console.log("selectStudent", res);
    console.log('选择的学生是', this.data.studentList[res.detail.value]);
    this.generateOrder(this.data.studentList[res.detail.value]);
  },
  /**
   * @function 生成订单
   * @param userInfo 学生信息
   */
  generateOrder: async function (userInfo: any, img?: string[]) {
    const course: any = this.data.detail;
    const signNum = parseInt(course.sign_num); // 已报名人数
    const signMax = parseInt(course.sign_max); // 最大报名人数
    if (signNum >= signMax) {
      // 名额不足
      msg.Modal('希望下次早点报名喔!', '名额不足');
      return;
    }
    // 名额充足
    if (!img) {
      await msg.Modal('是否上传出行人的健康码材料', '提示', true)
        .then((res: any) => {
          if (res.confirm) {
            wx.navigateTo({
              url: '../../order/material/index',
              events: {
                submit: (data: { img: string }) => {
                  console.log(data);
                  studentApply({
                    user: userInfo,
                    course: course,
                    more_file: data.img,
                  })
                }
              }
            })
          } else {
            studentApply({
              user: userInfo,
              course: course
            })
          }
        })
      return;
    }
    studentApply({
      user: userInfo,
      course: course
    })
  },
  /**
   * @function 返回上一个页面
   */
  navBack: function () {
    setTimeout(() => {
      wx.navigateBack();
    }, 250)
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options: { id: string }) {
    const id_flag = wx.getStorageSync('id_flag');
    const user = wx.getStorageSync('user');
    if (!user) {// 未登录
      msg.Modal('请登录')
        .then(res => {
          wx.switchTab({
            url: '../../individual/index',
          })
        })
      return;
    }
    this.getDetail(options.id).then((course) => {
      if (id_flag == 'teacher' && user.type == '2') { //学校老师，拿到自己班的学生的列表
        GetStudentList({
          tid: user.id,
          cid: course.id,
        })
          .then((res: any) => {
            console.log(res);
            if (res.data.fail) {
              const studentList = res.data.fail;
              if (studentList.length < 1) {
                // msg.Modal('没有查询到学生');
                return;
              }
              // console.log("studentList",studentList);
              const studentInfoList = studentList.map((item: any) => {
                return item.name + " " + item.schoolname + " " + item.grade + "年级 " + item.class + "班";
              })
              this.setData({
                studentInfoList: studentInfoList,
                studentList: studentList,
              })
            }
          })
        return;
      }
    })
    .catch(() => {})
  
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

/**
 * @function 学生报名
 */
const studentApply = (data: { user: any, course: any, more_file?: string }) => {
  const { user, course, more_file } = data;
  msg.Loading();
  StudentApply({
    userid: user.id,
    courseid: course.id,
    username: user.name,
    more_file: more_file || '',
  })
    .then((res: any) => {
      console.log('报名数据', res.data.data);
      msg.HideLoading();
      if (res.data.data.msg == '报名成功') {
        // 报名成功 跳转确认订单界面
        wx.navigateTo({
          url: `../../order/confirm/index?id=${course.id}&orderid=${res.data.data.id}&userInfo=${JSON.stringify(user)}`
        })
        return;
      } // 报名成功
      else {
        msg.Modal('该活动已报名,请跳转到订单页面', '报名失败', true)
          .then((res: any) => {
            if (res.confirm) {
              setTimeout(() => {
                wx.redirectTo({
                  url: '../../individual/apply/index',
                })
              }, 500)
            }
          })
      } // 报名失败
    }) // 获取订单信息成功回调
    .catch(err => {
      msg.HideLoading();
      msg.Modal('报名时出现错误', '报名失败');
    })
}